home *** CD-ROM | disk | FTP | other *** search
/ The Best of MacTutor - S…e Code for Volumes 1 to 5 / The Best of MacTutor - Source Code for Volume 1-5 (Wayzata Technology)(6031)(1990).bin / Source Code / #03 (Aug85-Sep85) / asm / asm MDS Print Vol. 1 #10 / MDSPRINT.ASM next >
Assembly Source File  |  1985-08-13  |  6KB  |  179 lines

  1. ; Print "hello" on the printer.
  2. ;       Written by Steve Yaeger
  3. ; If the printer is off-line, this will hang the Mac
  4. ;       until it is put back on line
  5. ; If there is no Printdriver file it just Beeps and exits
  6. ;
  7. ; The Linker file looks like this
  8. ;
  9. ;       HELLO.REL
  10. ;       ]
  11. ;
  12. ; These are the Equates Notice that the iPrReset, iPrLineFeed, 
  13. ; and  iPrPageEnd are Longwords and not words as in 
  14. ; PREQU.TXT from Counsulair.
  15.  
  16.     XREF    START
  17.  
  18. ; These are the PrDrvr constants.
  19.  
  20. iPrDrvrRef      EQU         $FFFD     ; Driver's RefNum = NOT ResID
  21. iPrIOCtl         EQU         5          ; The Raw Byte IO Proc's ctl # 
  22. iPrDevCtl         EQU         7        ; The PrDevCtl Proc's ctl  # 
  23. iPrReset          EQU         $00010000     ; The CParam for res
  24. iPrPageEnd        EQU         $00020000    ; The CParam for end
  25. iPrLineFeed        EQU         $00030000     ; The CParam for pap 
  26. lParam1             EQU         0           ; the three printer parameters
  27. lParam2             EQU         4
  28. lParam3            EQU         8
  29.  
  30. ; These are the standard call parameters
  31.  
  32. csCode            EQU         $1A        ;control dependent command 
  33. csParam             EQU         $1C      ;control dependent param.
  34. ioCompletion      EQU         $C       ;pointer to async notifier routine
  35. ioResult       EQU         $10         ;returns operation results
  36. ioFileName        EQU         $12      ;pointer to name of driver
  37. ioRefNum          EQU         $18      ;driver reference #
  38. ioPermssn          EQU         $1B         ;read/write permission
  39.  
  40. ; Traps used in this program
  41.  
  42.     .TRAP       _InitGraf      $A86E
  43.     .TRAP       _InitFonts     $A8FE
  44.     .TRAP       _FlushEvents   $A050
  45.     .TRAP       _InitWindows   $A912
  46.     .TRAP       _InitMenus     $A930
  47.     .TRAP       _InitDialogs   $A97B
  48.     .TRAP       _InitCursor    $A850
  49.     .TRAP       _TEInit        $A9CC
  50.     .TRAP       _Open          $A000
  51.     .TRAP       _Control       $A004
  52.     .TRAP       _SysBeep       $A9C8
  53.  
  54. START
  55.  
  56. ;Initialize Managers
  57.  
  58. PEA         -4(A5)              ;Space Created For Quickdraw's Use
  59. _InitGraf                   ;Init Quickdraw
  60. _InitFonts                  ;Init the Font Manager
  61.  
  62. MOVE.L      #$0000FFFF,D0       ;This Mask Is For All Events
  63. _FlushEvents                ;Flush All Of These Events
  64.  
  65. _InitWindows                ;Init the Window Manager
  66. _InitMenus                  ;Init the Menu Manager
  67.  
  68. CLR.L       -(SP)               ;restart procedure
  69. _InitDialogs                ;Init the Dialog Manager
  70.  
  71. _InitCursor                 ;Init to arrow cursor
  72. _TEInit                     ;Init Text Edit
  73.  
  74. ;------- OPEN THE PRINT DRIVER -------
  75.  
  76. LEA          '.Print',A1            ;Get a Pointer to the Drivers Name
  77. LEA         IOPARMS,A0                ;Get the Parameter base addres
  78. MOVE.L      A1,ioFileName(A0)       ;Store the Drivers Name addr
  79. CLR.B      ioPermssn(A0)            ;fsCurPerm (whatever we got)
  80. _OPEN
  81. LEA         IOPARMS,A0                 ;Get the Parameter base address
  82. MOVE.W    ioResult(A0),D0      ;Check for an error
  83. CMP.W     #0,D0                ;is result ok?
  84. BEQ         @0                   ;Yes skip the error bell
  85. MOVE.W    #30,-(SP)            ;beep length
  86. _SYSBEEP                      ;beep to indicate error
  87. BRA         @4
  88.  
  89. @0
  90.  
  91. ;------ RESET THE PRINTER TO DEFAULTS -------
  92.  
  93. LEA         IOPARMS,A0                 ;Get the Parameter base addr
  94. MOVE.W    #iPrDevCtl,csCode(A0)   ;Set up a control type call
  95. MOVE.L      #iPrReset,csParam+lParam1(A0)   ;only 1 (Reset)
  96. CLR.L       csParam+lParam2(A0)
  97. CLR.L       csParam+lParam3(A0)
  98. _CONTROL
  99. LEA         IOPARMS,A0                 ;Get the Parameter base address
  100. MOVE.W    ioResult(A0),D0         ;Check for an error
  101. CMP.W       #0,D0                   ;is result ok?
  102. BEQ         @1                   ;Yes skip the error bell
  103. MOVE.W    #30,-(SP)            ;beep length
  104. _SYSBEEP                      ;beep to indicate error
  105. BRA         @4
  106.  
  107. @1
  108.  
  109. ;------ ACTUALLY PRINT THE WORD HELLO -------
  110.  
  111. LEA        TEXT_STRING,A1                ;Get address of string to pr
  112. LEA         IOPARMS,A0                     ;Get the Parameter base addres
  113. MOVE.W    #iPrIOCtl,csCode(A0)      ;Set up a text streaming call
  114. MOVE.L    A1,csParam+lParam1(A0)  ;Parameter one is a     pointer to the text
  115. MOVE.L    #(TEXT_STRING_END-TEXT_STRING), csParam+lParam2(A0)
  116.                                             ;Parameter two is the length of the text
  117. CLR.L        csParam+lParam3(A0)        ;No third Parameter
  118. _CONTROL
  119. LEA         IOPARMS,A0                 ;Get the Parameter base address
  120. MOVE.W    ioResult(A0),D0              ;Check for an error
  121. CMP.W       #0,D0                      ;is result ok?
  122. BEQ         @2                        ;Yes skip the error bell 
  123. MOVE.W    #30,-(SP)                  ;beep length
  124. _SYSBEEP                            ;beep to indicate error
  125. BRA     @4
  126.  
  127. @2
  128.  
  129. ;------ PRINT A CR+LF JUST FOR THE FUN OF IT --------
  130.  
  131. LEA         IOPARMS,A0                ;Get the Parameter base addres
  132. MOVE.W      #iPrDevCtl,csCode(A0)   ;Set up a control type call
  133. MOVE.L      #iPrLineFeed,csParam+lParam1(A0) ;only 1? parameter (CR+LF)
  134. CLR.L       csParam+lParam2(A0)     ;Parameter 2 undetermined
  135. CLR.L      csParam+lParam3(A0)
  136. _CONTROL
  137. LEA         IOPARMS,A0                 ;Get the Parameter base address
  138. MOVE.W      ioResult(A0),D0           ;Check for an error
  139. CMP.W       #0,D0                      ;is result ok?
  140. BEQ         @3                         ;Yes skip the error bell
  141. MOVE.W      #30,-(SP)                  ;beep length
  142. _SYSBEEP                            ;beep to indicate error
  143. BRA     @4
  144.  
  145. @3
  146.  
  147. ;---- EJECT A PAGE SO THAT WE CAN SEE WHAT HAPPENS
  148.  
  149. LEA         IOPARMS,A0                  ;Get the Parameter base address
  150. MOVE.W      #iPrDevCtl,csCode(A0)   ;Set up a control type call
  151. MOVE.L      #iPrPageEnd,csParam+lParam1(A0) ;only 1 parameter (eject)
  152. CLR.L       csParam+lParam2(A0)
  153. CLR.L       csParam+lParam3(A0)
  154. _CONTROL
  155. LEA         IOPARMS,A0                  ;Get the Parameter base address
  156. MOVE.W      ioResult(A0),D0        ;Check for an error
  157. CMP.W       #0,D0                  ;is result ok?
  158. BEQ.S       @4                     ;Yes skip the error bell
  159. MOVE.W      #30,-(SP)              ;beep length
  160. _SYSBEEP                        ;beep to indicate error
  161. @4
  162.  
  163. RTS
  164.  
  165.  ;        Data Structures
  166.  
  167. TEXT_STRING         DC.B    '    HELLO'
  168. TEXT_STRING_END
  169.  
  170. .ALIGN  2
  171. IOPARMS             DCB.L       20,0
  172.  
  173. ; ------------------   end of program  -----------------------
  174.  
  175.  
  176.  
  177.  
  178.  
  179.